<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Mail\Message;

class UserController extends BaseController
{
    /**
     * 用户表后台首页
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function index(){

        $data= User::withTrashed()->orderBy('id','desc')->paginate($this->pathSize);

        return view('admin.user.index',compact('data'));
    }

    /**
     * 执行添加
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
     */
    public function add(Request $request){


        return view('admin.user.add');
    }

    /**
     * 执行添加
     * @param Request $request
     * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
     */
    public function addUp(Request $request){
       // dd(1);
        try {
            $validated = $request->validate([

                'username' => 'required',
                'truename' => 'required',
                'password' => 'required',
                'sex'=>'required',

                'email'=>'required',
                'phone'=>'required'

            ]);
            $validated['password']=bcrypt($validated['password']);
            //dd($validated);

            $res=User::create($validated);

            if ($res){
                    //纯文本 邮件
              /*    \Mail::raw('曹智勇 最帅',function (Message $message) {
                    $message->to("1912298939@qq.com"); //发送到
                    $message->subject("测试邮件"); // 邮件标题
                });
              */
                //发送富文本邮件 通知客户
                //富文本必须时两个参数 第一个参数时模板视图，第二个时模板附带的数据
                \Mail::send('admin.user.mail',$validated,function (Message $message) use($validated) {
                    $message->to($validated['email']); //发送到
                    $message->subject("测试邮件"); // 邮件标题
                });
                return redirect(route('admin.user.index'));
            }else{

                return redirect(route('admin.user.add'))->withErrors('添加失败');
            }

        }catch (\Exception $e){

            return redirect(route('admin.user.add'))->withErrors($e->getMessage());

        }


    }

    /**
     * 用户删除
     * @param Request $request
     * @return array
     * @throws \Illuminate\Validation\ValidationException
     */
    public function del(Request $request){
       $id=$request->get('id');


       //验证数据 id 是否 为纯数字 且 大于等于 0
       $this->validate($request,[
           'id'=>'required|integer|min:0'
       ]);

       //删除 如果 使用了软删除 就是软删除
     $res=  User::destroy($id);
    if ($res){

        return ['error_code'=>0,'data'=>"",'msg'=>"删除成功"];
    }else{


        return ['error_code'=>10010,'msg'=>"删除失败"];
    }

    }

    /**
     * 用户恢复
     * @param Request $request
     * @return array
     * @throws \Illuminate\Validation\ValidationException
     */
    public function restore(Request $request){

        $id=$request->get('id');


        //验证数据 id 是否 为纯数字 且 大于等于 0
        $this->validate($request,[
            'id'=>'required|integer|min:0'
        ]);

        //删除 如果 使用了软删除 就是软删除
        $res=  User::where('id',$id)->restore();
        if ($res){

            return ['error_code'=>0,'data'=>"",'msg'=>"恢复成功"];
        }else{


            return ['error_code'=>10010,'msg'=>"恢复失败"];
        }



    }

    public function role(User $user,Request $request){

        //判断是否是get请求，如果是get请求就分配页面，不是就分配角色
        if($request->isMethod('get')){

            //获取所有角色
            $data=Role::all();

            //获取当前角色id  //user自带
            //也可以通过 模型关联进行获得

            $currentRoleID = $user->role()->value('id');

            return view('admin.user.role',compact('user','data','currentRoleID'));
        }else{
            $user->role_id=$request->get('role_id');
            $res= $user->save();

            if ($res){

                return redirect(route('admin.user.index'));
            }else{

                return redirect(route('admin.user.role',$user))->withErrors('添加失败');
            }

        }


    }


}
